## Деление нацело и взятие остатка

`2024.05.12`

```C
#include <stdio.h>

int main(int argc, char* argv[]) {
    int x = 12345;
    printf("%d %d\n", x/1000, x%1000);
    
    return 0;
}
```

Отрицательные остатки от деления математически являются не совсем нормальными. Остатки при делении на положительное число, на некий модуль в рамках которого обычно строится кольцо, предполагается, что они будут равны базовым вычетам (то есть от 0 до модуля, на который происходит деление; в примере выше 0…9 (включительно)) `! Си пользуется стандартными машинными командами процессоров Интел или АМД. Пайтон же следует математическим правилам`

#### Дробное деление

```C
double x;
x = (1/2);  // double = (int/int) = INT(0=>0.0);
x = (1/2.); // точка делает константу дробной
```

```C
#include <stdio.h>

int main(void) {
    // неявное приведение типов
    double x = (1./2.);
    // явное приведение типов
    int y = 1, z = 2;
    x = (double) y / (double) z;
    
    return 0;
}
```

> ➗ *будьте аккуратны при делении, пользуйтесь взятием остатка*

---

## Операции присваивания и сравнения

`2024.05.12`

В Си эти операции относятся к арифметическим, хоть и весьма условно ими являются

```C
x = y = z = 5;          // выполняются справа налево
(x = (y = (z = 5)));    // равнозначная запись
                        // есть термин l-value (допустимый к изменению)
                        // то есть реальная оперативная память, куда можно записать

2 + 2;                  // будет вычислено, но результат выброшен
x = (y = 2) + (z = 3);
x = (x = 2) + (x = 3);  // непредсказуемое поведение (одно и то же место в памяти используется при одной и той же точке следования)
x = (x++) + (++x);      // тоже неопределенное поведение; на усмотрение компилятора
```

#### Операции присваивания

```C
int x = 256;
x += 256;   // 512
x -= 256;   // 256
x *= 2;     // 512
x /= 8;     // 64
```

#### Операции сравнения

```C
int x = 0;
x = (5 > 2);    // int = int > int
                // 0 (int) FALSE
                // 1 (int) TRUE

x = (5u > -1);   // -1 преобразуется в unsigned первой в 2e32-1, то есть в очень большое число
x = (5 > -1) + (3 <= 4) + (2*2 == 2+2) + (2*3 != 2+3);
```

---